/**
 * public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x }
    }

    // 最左边为个位
    example:[2,4,3]+[5,6,4]=[7,0,8]
    即：342+465=807
 */

var addTwoNumbers = function (l1, l2) {
    // 头节点
    let dummy = new ListNode()
    // 当前节点
    let curr = dummy
    // 进位记录
    let carry = 0

    while (l1 !== null || l2 !== null) {
        let sum = 0
        if (l1 !== null) {
            sum += l1.val
            l1 = l1.next
        }
        if (l2 !== null) {
            sum += l2.val
            l2 = l2.next
        }
        sum += carry

        // 生成当前节点的值
        curr.next = new ListNode(sum % 10)
        // 生成当前carry
        carry = Math.floor(sum / 10)
        // 后移
        curr = curr.next
    }
    // 最后一位还有进位则新增一个节点
    if (carry > 0) {
        curr.next = new ListNode(carry)
    }
    return dummy.next
}